<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
    <script src="../../../resources/js-test.js"></script>
</head>
<body>
<div style="height: 1000px; width: 1000px; border: 1px solid black;">This box should force the window to have a scrollable area to test.</div>
<script language="JavaScript" type="text/javascript">
    var resetX;
    var resetY;

    var x = 25;
    var y = 50;

    function reset()
    {
        window.scrollTo(0,0);
        resetX = window.scrollX;
        resetY = window.scrollY;
    }

    if (window.testRunner)
        testRunner.dumpAsText();

    reset();

    description("This test makes sure that calling the window scrolling\
    methods with a single non-dictionary argument or with a dictionary \
    whose 'behavior' field is invalid throws an exception.");

    // scrollTo /////////////////////////
    debug('');
    debug('window.scrollTo Tests');
    debug('');

    debug("Testing - scrollTo with 0 arguments");
    shouldNotThrow('window.scrollTo()');
    reset();

    debug("Testing - scrollTo with 1 non-dictionary argument");
    shouldThrow('window.scrollTo(x)');;
    reset();

    debug("Testing - scrollTo with a valid ScrollToOptions argument");
    shouldNotThrow('window.scrollTo({ })');
    shouldNotThrow('window.scrollTo({ left: x })');
    shouldNotThrow('window.scrollTo({ top: y })');
    shouldNotThrow('window.scrollTo({ behavior: "auto" })');
    shouldNotThrow('window.scrollTo({ behavior: "instant" })');
    shouldNotThrow('window.scrollTo({ behavior: "smooth" })');
    shouldNotThrow('window.scrollTo({ left: x, top: y })');
    shouldNotThrow('window.scrollTo({ left: x, top: y, behavior: "auto" })');
    shouldNotThrow('window.scrollTo({ left: x, top: y, behavior: "instant" })');
    shouldNotThrow('window.scrollTo({ left: x, top: y, behavior: "smooth" })');

    debug("Testing - scrollTo with an invalid ScrollToOptions argument");
    shouldThrow('window.scrollTo({ behavior: "" })');
    shouldThrow('window.scrollTo({ left: x, top: y, behavior: "abcd" })');
    shouldThrow('window.scrollTo({ left: x, top: y, behavior: 200 })');

    // scroll /////////////////////////
    debug('');
    debug('window.scroll Tests');
    debug('');

    debug("Testing - scroll with 0 arguments");
    shouldNotThrow('window.scroll()');;
    reset();

    debug("Testing - scroll with 1 argument");
    shouldThrow('window.scroll(x)');
    reset();

    debug("Testing - scroll with a valid ScrollToOptions argument");
    shouldNotThrow('window.scroll({ })');
    shouldNotThrow('window.scroll({ left: x })');
    shouldNotThrow('window.scroll({ top: y })');
    shouldNotThrow('window.scroll({ behavior: "auto" })');
    shouldNotThrow('window.scroll({ behavior: "instant" })');
    shouldNotThrow('window.scroll({ behavior: "smooth" })');
    shouldNotThrow('window.scroll({ left: x, top: y })');
    shouldNotThrow('window.scroll({ left: x, top: y, behavior: "auto" })');
    shouldNotThrow('window.scroll({ left: x, top: y, behavior: "instant" })');
    shouldNotThrow('window.scroll({ left: x, top: y, behavior: "smooth" })');

    debug("Testing - scroll with an invalid ScrollToOptions argument");
    shouldThrow('window.scroll({ behavior: "" })');
    shouldThrow('window.scroll({ left: x, top: y, behavior: "abcd" })');
    shouldThrow('window.scroll({ left: x, top: y, behavior: 200 })');

    // scrollBy /////////////////////////
    debug('');
    debug('window.scrollBy Tests');
    debug('');

    debug("Testing - scrollBy with 0 arguments");
    shouldNotThrow('window.scrollBy()');;
    reset();

    debug("Testing - scrollBy with 1 argument");
    shouldThrow('window.scrollBy(x)');
    reset();

    debug("Testing - scrollBy with a valid ScrollOptions argument");
    shouldNotThrow('window.scrollBy({ })');
    shouldNotThrow('window.scrollBy({ left: x })');
    shouldNotThrow('window.scrollBy({ top: y })');
    shouldNotThrow('window.scrollBy({ behavior: "auto" })');
    shouldNotThrow('window.scrollBy({ behavior: "instant" })');
    shouldNotThrow('window.scrollBy({ behavior: "smooth" })');
    shouldNotThrow('window.scrollBy({ left: x, top: y })');
    shouldNotThrow('window.scrollBy({ left: x, top: y, behavior: "auto" })');
    shouldNotThrow('window.scrollBy({ left: x, top: y, behavior: "instant" })');
    shouldNotThrow('window.scrollBy({ left: x, top: y, behavior: "smooth" })');

    debug("Testing - scrollBy with an invalid ScrollOptions argument");
    shouldThrow('window.scrollBy({ behavior: "" })');
    shouldThrow('window.scrollBy({ left: x, top: y, behavior: "abcd" })');
    shouldThrow('window.scrollBy({ left: x, top: y, behavior: 200 })');
</script>
</body>
</html>
